package biz

import (
	"context"
	"github.com/go-kratos/kratos/v2/log"
	"time"
)

// biz层，处理Data Transfer Object对象。

// 定义用户信息结构体
type Data struct {
	ID        int64
	Username  string
	Email     string
	Password  string
	CreateAt  time.Time
	UpdateAt  time.Time
	IsDeleted bool
}

type DataRepo interface {
	ListUsers(ctx context.Context) ([]*Data, error)
	GetUser(ctx context.Context, id int64) (*Data, error)
	CreateUser(ctx context.Context, Data *Data) error
	UpdateUser(ctx context.Context, id int64, Data *Data) error
	DeleteUser(ctx context.Context, id int64) error
	CheckExist(ctx context.Context, eml string) error
}

// 对数据库对象的封装
type UserUsecase struct {
	repo DataRepo
}

// 构造器
func NewUserUsecase(repo DataRepo, logger log.Logger) *UserUsecase {
	return &UserUsecase{repo: repo}
}

// 进行crud的api编写

func (uc *UserUsecase) List(ctx context.Context) (ps []*Data, err error) {
	ps, err = uc.repo.ListUsers(ctx)
	if err != nil {
		return
	}
	return
}

func (uc *UserUsecase) Get(ctx context.Context, id int64) (p *Data, err error) {
	p, err = uc.repo.GetUser(ctx, id)
	if err != nil {
		return
	}
	return
}

func (uc *UserUsecase) Create(ctx context.Context, Data *Data) error {
	return uc.repo.CreateUser(ctx, Data)
}

func (uc *UserUsecase) Update(ctx context.Context, id int64, Data *Data) error {
	return uc.repo.UpdateUser(ctx, id, Data)
}

func (uc *UserUsecase) Delete(ctx context.Context, id int64) error {
	return uc.repo.DeleteUser(ctx, id)
}

func (uc *UserUsecase) CheckExist(ctx context.Context, eml string) error {
	return uc.repo.CheckExist(ctx, eml)
}
